// Copyright 2022 marcello<volibearw@gmail.com>. All rights reserved.

package main

import (
	"log"
	"os"
)

// generateModel 生成model
func generateModel(param *CLIParam, tables map[string][]Columns) {

	if !param.Model {
		log.Println("跳过生成model")
		return
	} else {
		log.Println("开始生成model...")
	}

	for tableName, columns := range tables {

		var (
			err error
			//f        os.FileInfo
			content  = "package " + param.ModelFilePackage + "\n\n"
			filename = param.ModelOut + "/" + toSnakeString(tableName) + ".go" // model文件名
		)

		if !param.ModelOverwrite {
			// 不覆盖的时候才检查文件是否存在
			if _, err = os.Stat(filename); err == nil {
				log.Println("文件 " + filename + " 已经存在,跳过")
				continue
			}
		}

		content += generateModelImportPart(param)                        // 生成import部分
		content += generateModelStructPart(param, tableName, columns)    // 生成struct及实例化部分
		content += generateModelFromProtoPart(param, tableName, columns) // 生成 from proto 部分
		content += generateModelToProtoPart(param, tableName, columns)   // 生成 from proto 部分

		log.Println("生成文件: " + filename)
		if err = writeFile(filename, content); err != nil {
			log.Println(err)
		}
		content = ""
	}
}
